grammar LabeledExpr;

prog:   stat+;
// label name
stat:   expr NEWLINE                # printExpr
    |   ID '=' expr NEWLINE         # assign
    |   NEWLINE                     # blank
    ;

//set op name
expr:   expr op=('*' | '/') expr    # MulDiv
    |   expr op=('+' | '-') expr    # AddSub
    |   INT                         # int
    |   ID                          # id
    |   '(' expr ')'                # parens
    ;

MUL:    '*';                // assigns token name to '*'
DIV:    '/';
ADD:    '+';
SUB:    '-';
ID:     [a-zA-Z]+;          // match identifiers
INT:    [0-9]+;             // match integers
NEWLINE:    '\r'?'\n';      // new lines
WS:     [\t ]+ -> skip;     // toss out whitespace